﻿#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

#include <stdio.h>
#include <stdlib.h>

typedef struct {
	int n;
	int data[10000];
}Context;
Context context = { 0 };

void read_context(Context* ctx);
void solve(Context* ctx);
void do_A1(Context* ctx);
void do_A2(Context* ctx);
void do_A3(Context* ctx);
void print_value(int s)
{
	if (s)
		printf("%d", s);
	else
		printf("None");
}

void read_context(Context* ctx)
{
	int n;
	scanf("%d", &n);
	ctx->n = n;
}

void do_A1(Context* ctx)
{
	int s = 0;
	for (int i = 0; i < ctx->n; ++i)
		if (ctx->data[i] > s&& ctx->data[i] % 3 == 0)
			s = ctx->data[i];
	if (s)
		printf("%d", s);
	else
		printf("None");
}

void do_A2(Context* ctx)
{
	int s = 0;
	for (int i = 0; i < ctx->n; ++i)
		if (ctx->data[i] % 3 == 1)
			++s;
	if (s)
		printf(" %d", s);
	else
		printf(" None");
}

void do_A3(Context* ctx)
{
	int s = 0;
	double sum = 0;
	for (int i = 0; i < ctx->n; ++i)
		if (ctx->data[i] % 3 == 2) {
			++s;
			sum += ctx->data[i];
		}
	if (s)
		printf(" %.1f", sum / s);
	else
		printf(" None");
}

void solve(Context* ctx)
{
	int v;
	int a1=0;
	int c2=0;
	int c3=0;
	long long sum3 = 0;
	for (int i = 0; i < ctx->n; ++i) {
		scanf("%d", &v);
		switch (v % 3)
		{
		case 0:
			if (a1 < v)
				a1 = v;
			break;
		case 1:
			c2++;
			break;
		case 2:
			c3++;
			sum3 += v;
			break;
		}
	}
	print_value(a1);
	printf(" ");
	print_value(c2);
	printf(" ");
	if (c3)
		printf("%.1f", (double)sum3 / c3);
	else
		printf("None");
	printf("\n");
}

int main()
{
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-185.txt", "r", stdin);
	read_context(&context);
	solve(&context);
	return 0;
}
